const { sequelize } = require('../models');
const adminService = require('../services/adminService');
const rolePermissionService = require('../services/rolePermissionService');
const createAdminTables = require('./createAdminTables');

async function testAdminSystem() {
  try {
    console.log('🔧 测试管理员系统...');

    // 1. 测试数据库连接
    console.log('1. 测试数据库连接...');
    await sequelize.authenticate();
    console.log('✓ 数据库连接成功');

    // 2. 创建管理员系统表
    console.log('2. 初始化管理员系统...');
    await createAdminTables();
    console.log('✓ 管理员系统初始化完成');

    // 3. 测试管理员登录
    console.log('3. 测试管理员登录...');
    try {
      const loginResult = await adminService.login('admin', 'admin123', '127.0.0.1');
      console.log('✓ 管理员登录成功');
      console.log('  - Token:', loginResult.token ? '已生成' : '未生成');
      console.log('  - 用户名:', loginResult.admin.username);
      console.log('  - 角色数量:', loginResult.admin.roles.length);
      console.log('  - 权限数量:', loginResult.admin.permissions.length);
    } catch (error) {
      console.log('✗ 管理员登录失败:', error.message);
    }

    // 4. 测试权限检查
    console.log('4. 测试权限检查...');
    try {
      const hasPermission = await adminService.checkPermission(1, 'admin', 'read');
      console.log('✓ 权限检查功能正常，结果:', hasPermission);
    } catch (error) {
      console.log('✗ 权限检查失败:', error.message);
    }

    // 5. 测试角色管理
    console.log('5. 测试角色管理...');
    try {
      const roleList = await rolePermissionService.getRoleList({ limit: 5 });
      console.log('✓ 角色列表获取成功，数量:', roleList.roles.length);
    } catch (error) {
      console.log('✗ 角色管理测试失败:', error.message);
    }

    // 6. 测试权限管理
    console.log('6. 测试权限管理...');
    try {
      const permissionList = await rolePermissionService.getPermissionList({ limit: 10 });
      console.log('✓ 权限列表获取成功，数量:', permissionList.permissions.length);
    } catch (error) {
      console.log('✗ 权限管理测试失败:', error.message);
    }

    console.log('\n🎉 管理员系统测试完成！');
    console.log('\n📋 系统信息:');
    console.log('  - 默认管理员用户名: admin');
    console.log('  - 默认管理员密码: admin123');
    console.log('  - 登录接口: POST /api/admin/auth/login');
    console.log('  - 管理员管理: /api/admin/admins');
    console.log('  - 角色管理: /api/admin/roles');
    console.log('  - 权限管理: /api/admin/permissions');

  } catch (error) {
    console.error('❌ 管理员系统测试失败:', error);
  } finally {
    await sequelize.close();
    process.exit(0);
  }
}

// 运行测试
testAdminSystem();